// 真正的函数式宏和属性宏使用示例
// 注意：这些宏需要在单独的 proc_macro crate 中定义

// 由于我们无法在当前项目中直接使用 proc_macro，
// 这里展示的是使用第三方库的宏示例

// ============================================================================
// 1. 函数式宏示例 (来自第三方库)
// ============================================================================

// 这些是我们在项目中实际使用的函数式宏
// 虽然我们没有直接看到它们的定义，但它们确实存在

// 示例：vec! 宏 (来自标准库)
fn function_like_macro_examples() {
    // vec! 是一个函数式宏
    let numbers = vec![1, 2, 3, 4, 5];
    println!("vec! 宏创建的向量: {:?}", numbers);
    
    // println! 也是一个函数式宏
    println!("println! 宏输出");
    
    // format! 也是函数式宏
    let formatted = format!("Hello, {}!", "World");
    println!("format! 宏结果: {}", formatted);
}

// ============================================================================
// 2. 属性宏示例 (来自第三方库)
// ============================================================================

// 这些是我们在项目中实际使用的属性宏

// 来自 serde 库的属性宏
#[derive(Debug, Clone)]
struct ExampleStruct {
    field1: String,
    field2: i32,
}

// ============================================================================
// 3. 派生宏示例 (来自第三方库)
// ============================================================================

// 这些是我们在项目中实际使用的派生宏

#[derive(Debug, Clone)]
struct ExampleDerive {
    name: String,
    value: i32,
}

// ============================================================================
// 4. 模拟我们项目中的宏使用
// ============================================================================

// 模拟 clap 的 Parser 派生宏
#[derive(Debug)]
struct MockArgs {
    host: String,
    port: u16,
}

impl MockArgs {
    fn parse() -> Self {
        // 模拟解析逻辑
        Self {
            host: "127.0.0.1".to_string(),
            port: 8021,
        }
    }
}

// 模拟 serde 的序列化
impl MockArgs {
    fn to_json(&self) -> String {
        format!("{{\"host\":\"{}\",\"port\":{}}}", self.host, self.port)
    }
}

// ============================================================================
// 5. 测试函数
// ============================================================================

fn test_real_macros() {
    println!("=== 函数式宏测试 ===");
    function_like_macro_examples();
    
    println!("\n=== 属性宏测试 ===");
    let args = MockArgs::parse();
    println!("解析的参数: {:?}", args);
    println!("JSON 格式: {}", args.to_json());
    
    println!("\n=== 派生宏测试 ===");
    let example = ExampleDerive {
        name: "test".to_string(),
        value: 42,
    };
    println!("派生宏示例: {:?}", example);
}

// ============================================================================
// 6. 展示宏展开效果
// ============================================================================

fn show_macro_expansion() {
    println!("=== 宏展开效果展示 ===");
    
    // vec![1, 2, 3] 展开为：
    println!("vec![1, 2, 3] 展开为:");
    println!("  let mut v = Vec::new();");
    println!("  v.push(1);");
    println!("  v.push(2);");
    println!("  v.push(3);");
    println!("  v");
    
    // #[derive(Debug)] 展开为：
    println!("\n#[derive(Debug)] 展开为:");
    println!("  impl std::fmt::Debug for StructName {{");
    println!("      fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {{");
    println!("          // 自动生成的调试格式化代码");
    println!("      }}");
    println!("  }}");
    
    // #[tokio::main] 展开为：
    println!("\n#[tokio::main] 展开为:");
    println!("  fn main() {{");
    println!("      tokio::runtime::Runtime::new().unwrap().block_on(async {{");
    println!("          // 异步代码");
    println!("      }})");
    println!("  }}");
}

fn main() {
    test_real_macros();
    show_macro_expansion();
} 